package com.ulic.customerManApplication.achievementmodule.dao.impl;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Component;

import com.ulic.customerManApplication.achievementmodule.bo.SubAchievement;
import com.ulic.customerManApplication.achievementmodule.dao.SubAchievementDao;
import com.ulic.customerManApplication.achievementmodule.vo.SubAchievementVO;
import com.ulic.customerManApplication.base.BaseDao;
import com.ulic.customerManApplication.constant.CONSTANT;
import com.ulic.customerManApplication.membermodule.bo.SubMember;
import com.ulic.customerManApplication.pager.PagerModel;
import com.ulic.customerManApplication.usermodule.bo.User;
@Component("subAchievementDao")
public class SubAchievementDaoImpl extends BaseDao implements SubAchievementDao {

	private Session session;
	@Override
	public void deleteSubAchievement(SubAchievement subAchievement)
			throws Exception {

		session = getHibernateTemplate().getSessionFactory().getCurrentSession();
		session.delete(subAchievement);
		session.flush();
	}

	@Override
	public SubAchievement getSubAchievement(int id) {
		session = getHibernateTemplate().getSessionFactory().getCurrentSession();
		Criteria cri = session.createCriteria(SubAchievement.class);
		List list = cri.add(Restrictions.eq("sub_id", id)).list();
		SubAchievement subAchievement = null;
		if(list.size()>0){
			subAchievement	= (SubAchievement)list.get(0);
		}
		return subAchievement;
	}

	@Override
	public PagerModel getSubAchievements(int curPage) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<SubAchievement> getSubAchievements(User user) {
		session = getHibernateTemplate().getSessionFactory().getCurrentSession();
		Criteria cri = session.createCriteria(SubAchievement.class);
		List list = cri.createAlias("sub_user", "u").add(Restrictions.eq("u.um_user_id", user.getUm_user_id())).list();
		return list;
	}

	@Override
	public PagerModel getSubAchievements(SubAchievementVO subAchievementVO,
			int curPage) {
		StringBuilder sb = new StringBuilder();
		sb.append(" from SubAchievement subAchievement where subAchievement.sub_journeyOfLoveActivity.id="+subAchievementVO.getJourneyLoveId());
		SubAchievement subAchievement = subAchievementVO.getSubAchievement();
		if(subAchievement != null){
			if(subAchievement.getSub_achieveName()!= null && subAchievement.getSub_achieveName().length() !=0){
				sb.append(" and subAchievement.sub_achieveName  like '%"+subAchievement.getSub_achieveName().trim()+"%'");
			}
			if(subAchievement.getSub_achieveNumber()!= null && subAchievement.getSub_achieveNumber().length() !=0){
				sb.append(" and subAchievement.sub_achieveNumber  like '%"+subAchievement.getSub_achieveNumber().trim()+"%'");
			}
			if(subAchievement.getSubCompany()!= null){
				if(! "No".equals(subAchievement.getSubCompany()))
				sb.append(" and subAchievement.subCompany = '"+subAchievement.getSubCompany()+"'");
			}
			if(subAchievement.getSubCity()!= null){
				if(! "No".equals(subAchievement.getSubCity()))
				sb.append(" and subAchievement.subCity = '"+subAchievement.getSubCity()+"'");
			}
			if(subAchievementVO.getStartcreate()!=null &&subAchievementVO.getStartcreate().length()!=0){
				sb.append(" and subAchievement.sub_createDate>= to_date('"+subAchievementVO.getStartcreate()+" 00:00:00"+"','YYYY-MM-DD  HH24:MI:SS') ");
			}
			if(subAchievementVO.getEndcreate()!=null &&subAchievementVO.getEndcreate().length()!=0){
				sb.append(" and subAchievement.sub_createDate <= to_date('"+subAchievementVO.getEndcreate()+" 23:59:59"+"','YYYY-MM-DD  HH24:MI:SS') ");
			}
		}
		sb.append(" order by sub_createDate desc");
		return searchPaginated(sb.toString(), curPage, CONSTANT.PageSize);
	}

	@Override
	public void insertSubAchievement(SubAchievement subAchievement)
			throws Exception {

		session = getHibernateTemplate().getSessionFactory().getCurrentSession();
		session.save(subAchievement);
		session.flush();
	}

	@Override
	public void insertSubAchievements(List<SubAchievement> subAchievements)
			throws Exception {

		session = getHibernateTemplate().getSessionFactory().getCurrentSession();
		for(SubAchievement subAchievement:subAchievements){
			session.save(subAchievement);
		}
		session.flush();
	}

	@Override
	public void updateSubAchievement(SubAchievement subAchievement)
			throws Exception {
		try{
        	session = getHibernateTemplate().getSessionFactory().getCurrentSession();
        	session.merge(subAchievement);
        	session.flush();
        }catch (Exception e) {
			// TODO: handle exception
        	e.printStackTrace();
		}
	}

	@Override
	public List<SubAchievement> getSubAchievementsByJourId(Integer journeyLoveId) {
		session = getHibernateTemplate().getSessionFactory().getCurrentSession();
		Criteria cri = session.createCriteria(SubAchievement.class);
		List list = cri.createAlias("sub_journeyOfLoveActivity", "jour").add(Restrictions.eq("jour.id", journeyLoveId)).list();
		return list;
	}


}
